#include "baseframe.h"
#ifdef Q_OS_WIN
#include <windows.h>
#endif

BaseFrame::BaseFrame(QWidget *parent) : QWidget(parent)
{

}

//event->globalPos(): 鼠标在屏幕中的绝对位置
//frameGeometry().topLeft()：窗口左上角在屏幕中的坐标
//差值计算：鼠标坐标 - 窗口位置 保证推动时窗口与鼠标的相对位置不变
void BaseFrame::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton){
#ifdef Q_OS_WIN
    ReleaseCapture(); //释放当前鼠标捕获
    // 发送系统命令：SC_MOVE + HTCAPTION 组合模拟标题栏拖动
    SendMessage(HWND(winId()), WM_SYSCOMMAND, SC_MOVE | HTCAPTION, 0);
#else
    //鼠标全局坐标与窗口（左上角）位置的固定差值
    m_dragPosition = event->globalPos() - frameGeometry().topLeft();
#endif
    }
}

#ifdef Q_OS_WIN
#else
void BaseFrame::mouseMoveEvent(QMouseEvent *event)
{
    if(event->buttons() | Qt::LeftButton){
        //新位置 = 当前光标位置 - 固定差值
        move(event->globalPos() - m_dragPosition);
    }
}
#endif
